import handlers from '../handlers/index.js';
import { isObject } from '../utils/index.js';

// 缓存响应式对象的 WeakMap: 键为目标对象，值为响应式对象，用于避免重复创建
const proxyMap = new WeakMap();

/**
 * 创建响应式对象的函数
 * @param {*} target 目标对象
 * @returns {Proxy} 响应式对象
 */
export function reactive(target) {
  if (!isObject(target)) {
    return target;
  }

  // 如果已经存在响应式对象，则直接返回
  if (proxyMap.has(target)) {
    return proxyMap.get(target);
  }
  const result = new Proxy(target, handlers);
  // 缓存响应式对象
  proxyMap.set(target, result);
  return result;
}
